/**
 * 处理输入数据解密和验证签名
 */
const { decrypt, encrypt } = require('../utils/crypto');
const appConfig = require('../config/index');
const CustomExceptions = require('../exception/index');

const CryptoAndSign = async (ctx, next) => {
  console.log('进入加解密中间件');
  const [arg1] = ctx.input;
  console.log('参数1', arg1);
  ctx.input[0] = JSON.parse(decrypt(appConfig.secretKey, appConfig.iv, arg1));

  // 你可以测试错误抛出（业务处理的错误抛出也可以），外层的错误捕获中间件可以捕获到，代码去除注释，testData的say内容不为 我是大Fy哥 即可
  // if (ctx.input[0] && ctx.input[0].say !== '我是大Fy哥') {
  //   throw new CustomExceptions(500, '什么？你竟然不say 我是大Fy哥, 你出错了！！');
  // }

  await next();

  const { body } = ctx.output;
  console.log('业务处理函数返回值', body);
  ctx.output.body = encrypt(appConfig.secretKey, appConfig.iv, JSON.stringify(body));
  console.log('退出加解密中间件');
};

module.exports = CryptoAndSign;
